package tech.aistar.day09;

/**
 * 本类用来演示:字符串的比较 ==
 *
 * @author: success
 * @date: 2021/3/18 9:59 上午
 */
public class StringCompareDemo {
    public static void main(String[] args) {
        String s1 = "b";
        String s2 = "b";
        System.out.println(s1 == s2);//true

        String s3 = "a"+s1;//s3 -> 底层新建的new出来的StringBuilder对象
        String s4 = "ab";
        System.out.println("ab" == s3);//false
        System.out.println(s4 == s3);//false

        //此处的"a"和此处"b"本身就是一个字符串本身
        //不会生成一个StringBuilder对象,而是直接"ab"到串池中去检查是否已经存在
        //如果不存在,则在串池中创建,否则直接引用.
        String s5 = "a" + "b";
        System.out.println(s4 == s5);//true

        //定义成了final , s6->常量
        final String s6 = "a";
        //当s6使用final来修饰之后,那么会将s6+"b"->全部在"串池"中检测,不会涉及到创建新的对象
        String s7 = s6 + "b";
        System.out.println(s4 == s7);//true

        String s8 = new String("ab");
        String s9 = new String("ab");
        System.out.println(s8 == s9);//false


        //堆和串池中都会存在"ab"对象,s9默认指向的是堆中的对象
        //调用itern方法之后,会将s9指向串池中的"ab"对象.
        System.out.println(s4 == s9.intern());//true

        System.out.println(s4 == getString());

    }

    public static String getString(){
        return new String("ab");//false
        //return "ab";//true
    }
}
